// getColor1 随机颜色函数
// @return string color 表示颜色的rgb()字符串
function getColor1(){
    return `rgb(${parseInt(Math.random()*256)},${parseInt(Math.random()*256)},${parseInt(Math.random()*256)})`;
}


// getColor2 随机颜色函数
// @return string color 表示颜色的rgba()字符串
function getColor2(){
    return `rgba(${parseInt(Math.random()*256)},${parseInt(Math.random()*256)},${parseInt(Math.random()*256)},${parseInt(Math.random()*11)/10})`;
}


// getVC 随机验证码函数
// @param integer num 验证码位数 默认值是 6
// @param string cont 验证码内容 默认值是 大小写英文字母0-9数字
// @return string res 验证码最终结果 
// 验证码 没有 重复字符
function getVC(num = 6 , cont = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'){
    // 定义变量 存储 验证码字符
    var res = '';

    // 验证码不是num位数时 执行循环
    while( res.length !== num ){
        // 随机的索引下标
        var index = parseInt( Math.random() * cont.length );

        // 随机的字符不在验证码字符串中 执行拼接操作
        if( res.indexOf( cont[index] ) === -1 ){
            res += cont[index];
        }
    }

    // 返回值是验证码字符串
    return res;

}

//  myGetTime   获取时间数据对象
//  @return object  年 月 日 星期 时 分 秒
//  没有参数输入 获取 当期时间的时间对象
//  有参数输入 获取 输出时间的时间对象
function myGetTime(time){
    if( time === undefined ){
        // 没有参数输入
        // 创建当前事件对象
        var time = new Date();
    }else{
        // 有参数输入
        // 创建 参数对应的时间对象
        var time = new Date(time);
    }

    
    // 获取时间数据

    // 获取年份
    var year = time.getFullYear();

    // 获取月份
    var month = time.getMonth() + 1;

    // 获取日期
    var day = time.getDate()

    // 获取星期
    var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
    var week = arr[ time.getDay() ];

    // 获取小时 前导补零
    var hours = time.getHours();
    hours = hours < 10 ? '0' + hours : hours;

    // 获取分钟 前导补零
    var minutes = time.getMinutes();
    minutes = minutes < 10 ? '0' + minutes : minutes;

    // 获取小时 前导补零
    var seconds = time.getSeconds();
    seconds = seconds < 10 ? '0' + seconds : seconds;

    // 返回值是一个对象
    // return { year : year , month : month , day : day , week : week , hours : hours , minutes : minutes , seconds : seconds};
    return { year , month, day , week , hours , minutes , seconds };
}


//  getTd   获取时间差对象
//  @param  string  end     终止时间的字符串数据
//  @param  string  start   起始事件的字符串数据
//  @return object  时间差数据对象
//  输入终止时间字符串 
//  获取 和 当前时间的时间差 
//  返回 结果是 两个事件的 时间差数据对象 
//  输入 终止时间和起始时间 获取 两个时间,时间差数据对象
function getTD( end , start ){
    // 获取时间对象
    
    // 起始时间对象
    if( start === undefined ){
        var startTime = new Date();
    }else{
        var startTime = new Date(start);
    }

    // 终止时间对象
    var endTime = new Date( end );

    // 计算时间差 单位是 秒 
    var time = parseInt( ( endTime.getTime() - startTime.getTime() ) / 1000 );

    // 转化为 天 前导补零
    var d = parseInt( time / ( 24*60*60 ) );
    d = d < 10 ? '0' + d : d ;

    // 转化为 小时  前导补零
    var h = parseInt( ( time % ( 24*60*60 ) ) / ( 60*60 ) );
    h = h < 10 ? '0' + h : h ;


    // 转化为 分钟  前导补零
    var m = parseInt( ( time % ( 60*60 ) ) / 60 );
    m = m < 10 ? '0' + m : m ;


    // 转化为 秒  前导补零
    var s = time % 60 ;
    s = s < 10 ? '0' + s : s ;


    return { d,h,m,s };
}

// myGetStyle 获取标签样式函数
// @param object element 需要获取css样式的标签对象
// @param string style  需要获取的css样式的属性
// @return string 返回的是 指定标签对象指定属性 对应的 的属性值字符串
// 通过是输入 标签对象和css属性 获取 对应的 css样式属性值
// 可以兼容 低版本IE浏览器
function myGetStyle(element , style){
    if( window.getComputedStyle ){
        // 转化为 true 证明是 标准浏览器
        return window.getComputedStyle(element)[style] ; 
    }else{
        // 转化为 false 证明是 低版本IE浏览器
        return element.currentStyle[style];
    }
}


// myGetUrlVal  获取浏览器地址栏中的数据参数
// @return object   浏览器地址栏键值对参数转化的对象
// 自动获取浏览器地址栏中 携带的参数键值对
// 最终 转化为 对象数据结果
function myGetUrlVal(){
    // 获取 浏览器地址栏 键值对数据 不要问号
    var valStr = window.location.search.substr(1);

    // 创建一个空对象
    var obj = {};

    // 按照 & 符号 将 字符串转化为对象
    var arr1 = valStr.split('&');

    // 循环遍历数组 数据单元是 独立的 键值对字符串
    // 按照 = 等号 转化为数组
    arr1.forEach(function(item){
        // 将 item 也就是 键值对字符串 按照 = 等号 转化为 数组
        var arr2 = item.split('=');

        // 将 arr2数组中 索引0 设定为 对象的键名
        // 将 arr2数组中 索引1 设定为 对象的键值
        // 将 数值数据的 %十六进制 转护为 正常的字符串
        obj[ arr2[0] ] = window.decodeURIComponent( arr2[1] );
    })

    // 返回值 是 对象
    return obj;
}


// move 多属性运动函数
// @param   object element 要运动的标签对象
// @param   object typeObj 要运动的属性和最终属性值
// @param   function cb    运动结束执行的回调函数 默认值是空函数
function move( element , typeObj , cb = function(){} ){
    // 定义变量 存储 定时器个数
    var num = 0;

    // 循环遍历 参数2对象
    for( let type in typeObj ){
        // 变量 累加1
        num++;

        // 获取初始值
        let start = type === 'opacity' ? window.getComputedStyle(element)[type]*100 : parseInt(window.getComputedStyle(element)[type]) ;

        // 获取最终值
        let end = type === 'opacity' ? typeObj[type]*100 : typeObj[type];

        // 设定定时器
        let time = setInterval( function(){
            // 计算步长 
            let step = ( end - start ) / 10;

            // 步长取整
            step = step > 0 ? Math.ceil(step) : Math.floor(step);

            // 初始值 累加 步长
            start += step ;

            // 新的数值 赋值 标签对象的css属性值
            element.style[type] = type === 'opacity' ? start/100 : start + 'px';

            // 判断 初始值 是否等于 最终值
            if( start === end ){
                // 清除定时器
                clearInterval( time );

                // 变量储存的数值--
                num--;

                // 如果 num 是 0 证明所有定时器清除 触发回调函数
                if(num === 0){
                    cb();
                }
                
            }

        } , 30 )
    }
}



